/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.usbcali.proyectofinal.logica;

import co.edu.usbcali.proyectofinal.modelo.Clientes;
import co.edu.usbcali.proyectofinal.modelo.Cuentas;
import co.edu.usbcali.proyectofinal.modelo.Retiros;
import co.edu.usbcali.proyectofinal.modelo.Usuarios;
import java.math.BigDecimal;
import java.sql.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author alejandro
 */
@Scope("singleton")
@Service
public class TransaccionesLogica implements ITransaccionesLogica {

    @Autowired
    private ICuentasLogica cuentasLogica;

    @Autowired
    private IClientesLogica clientesLogica;

    @Autowired
    private IConsignacionesLogica consignacionesLogica;

    @Autowired
    private IRetirosLogica retirosLogica;

    @Autowired
    private IUsuariosLogica usuariosLogica;

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void retirar(String numeroCuenta, BigDecimal valor, long usuCedula) throws Exception {
        if (usuCedula == 0) {
            throw new Exception("La cedula no puede ser cero");
        }
        if (valor == null || valor == BigDecimal.ZERO) {
            throw new Exception("El valor no puede ser cero");
        }
        if (numeroCuenta.trim().equals("") || numeroCuenta == null) {
            throw new Exception("El numero de cuenta no es valido");
        }

        Cuentas cuentas = cuentasLogica.consultarCuentaNumero(numeroCuenta);
        if (cuentas == null) {
            throw new Exception("La cuenta no existe");
        }

        cuentas.setCueSaldo(valor.subtract(valor));
        cuentasLogica.modificarCuenta(cuentas);

        Usuarios usuarios = usuariosLogica.consultarUsuarioCedula(usuCedula);
        if (usuarios == null) {
            throw new Exception("El usuario no existe");
        }

        Retiros retiros = new Retiros();
        retiros.setCuentas(cuentas);
        retiros.setRetDescripcion("RETIRO");
        retiros.setRetFecha(new java.util.Date());
        retiros.setRetValor(valor);
        retiros.setUsuarios(usuarios);
        retiros.setId(null);

        retirosLogica.crearRetiro(retiros);

    }

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void consignar(String numeroCuenta, BigDecimal valor, long usuCedula) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void trasladar(String numeroCuentaOrigen, String numeroCuentaDestino, BigDecimal valor, long usuCedula) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}
